#ifndef RANK_H
#define RANK_H

#define RANKING_NONE                        0
#define RANKING_LOCAL_STATIC_RR             1
#define RANKING_LOCAL_SJF                   2
#define RANKING_LOCAL_RANDOM                3
#define RANKING_LOCAL_PROX_AWARE            4
#define RANKING_LOCAL_BASE                  5
#define RANKING_LOCAL_OLD                   6

#define RANKING_GLOBAL                      10
#define RANKING_GLOBAL_STATIC_RR            11
#define RANKING_GLOBAL_ROB_SJF              12
#define RANKING_GLOBAL_RANDOM               13
#define RANKING_GLOBAL_PROX_AWARE           14
#define RANKING_GLOBAL_BASE                 15
#define RANKING_GLOBAL_OLD                  16
#define RANKING_GLOBAL_STATIC_PREDEFINED    17
#define RANKING_GLOBAL_STALL_FAIRNESS       18
#define RANKING_GLOBAL_INSTR_SJF            19
#define RANKING_GLOBAL_NAST_PRIORITY        20
#define RANKING_GLOBAL_STALL_FAIRNESS_ORACLE  21
#define RANKING_GLOBAL_OS_PRIORITY          22
#define RANKING_GLOBAL_HYBRID_INST_NAST     23
#define RANKING_GLOBAL_STALL_CRITICAL       24


void QuantizeRankValues();
void QuantizeRankTwoTierValues();
void UpdateRankMatrix();
void GetRankMetricValues();
void kmean_algo(float values[64], int classes[64], int num_classes, int num_var, float merge_threshold);
void ClassPromotion(int classes[64], int num_classes, int num_values);
#endif
